<?php

/**
 * HelpFunctions...
 *
 * @version 	v 1.0.1
 * @date		10.11.2008
 * @copyright 	2008 (c) topline GmbH | Vadim Justus
 */

/**
 * generiert ein Passwort
 * @param	int	$z	Anzahl der Zeichen aus denen das Passwort bestehen soll
 * @return 	Ein Passwort aus Gro�- und Kleinbuchstaben und Zahlen
 */
function generatePassword($z, $p=false) {
	$pool = "qwertzupasdfghkyxcvbnm";
	$pool .= "WERTZUPLKJHGFDSAYXCVBNM";
	$pool .= "23456789";

	if($p) {
		$pool .= $p;
	}

	srand ((double)microtime()*1000000);
	for($i = 1;$i<=$z;$i++)
	{
		$pass .= substr($pool,(rand()%(strlen ($pool))), 1);
	}

	return $pass;
}

/**
 * Gibt alle aktuellen $_GET-Werte in einem String zur�ck
 * @param	boolen	$htmlentities	Tauscht '&' durch '&amp;' aus | Default = true
 */
function current_gets($htmlentities=true){
	foreach ($_GET as $get => $wert){
		$gets[] = $get.'='.$wert;
	}

	if($htmlentities) {
		$a = '&amp;';
	}
	else {
		$a = '&';
	}

	$g = '?';
	$g .= implode($a, $gets);

	return $g;
}

function self(){
	return 'http://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
}

function rewNewGets($lang, $mod, $act, $html, $id=false, $sid=false){
	$url = findPublicDir();
	if (modRewrite) {
		$url .= $lang.'/'.$mod.'/'.$act.'/';
		if ($id) {
			$url .= $id.'/';
		}
		if ($sid) {
			$url .= $sid.'/';
		}
		$url .= $html;
	}
	else {
		$url .= '?lang=' . $lang . '&modul=' . $mod . '&action=' . $act;
		if ($id) {
			$url .= '&id=' . $id;
		}
		if ($sid) {
			$url .= '&sid=' . $sid;
		}
	}

	return $url;
}

function rewTwGetReplace($find, $replace, $html=false){
	$url1 = self();
	$home = findPublicDir();
	$len = strlen($home);

	$url = substr($url1, $len);
	$urlparts = explode('/', $url);

	$c = count($urlparts)-1;

	if (!$html) {
		$html = explode('/', $url1);
		$html = $html[count($html)-1];
	}
	$urlparts[$find - 1] = $replace;
	$urlparts[$c] = $html;

	$returl = $home.implode('/', $urlparts);

	return $returl;
}

function findRootPath(){
	$pathToIndex = $_SERVER["PHP_SELF"];
	$host = $_SERVER["HTTP_HOST"];

	$pathParts = explode('/', $pathToIndex);
	$c = count($pathParts) - 2;
	for ($i=0; $i<$c; $i++) {
		$parts[] = $pathParts[$i];
	}

	$pathToPublic = implode('/', $parts);

	$ret = 'http://'.$host.$pathToPublic.'/';

	return $ret;
}

function findPublicDir(){
	$pathToIndex = $_SERVER["PHP_SELF"];
	$host = $_SERVER["HTTP_HOST"];

	$pathParts = explode('/', $pathToIndex);
	$c = count($pathParts) - 1;
	for ($i=0; $i<$c; $i++) {
		$parts[] = $pathParts[$i];
	}

	$pathToPublic = implode('/', $parts);

	$ret = 'http://'.$host.$pathToPublic.'/';

	return $ret;
}

/**
 * Durchsucht alle $_GET-keys und gleicht diese mit den keys von $gets ab.
 * Falls das gleiche Key einen anderen Wert hat, wird dieser in $_GET angepasst.
 * Falls ein Key aus $gets in $_GET nicht vorkommt, wird dieser angeh�ngt.
 * @param	array	$gets			Assoziatives Array
 * @param	boole	$htmlentities	Tauscht das '&'-Zeichen durch ein '&amp;' aus | Default = true
 * @return	string - neues $_GET
 */
function new_gets($gets, $htmlentities=true){
	if($htmlentities) {
		$a = '&amp;';
	}
	else {
		$a = '&';
	}

	$newget = '?';
	foreach ($_GET as $get => $wert){
		if(isset($gets[$get])) {
			$gs[] = $get.'='.$gets[$get];
		}
		else {
			$gs[] = $get.'='.$wert;
		}

		$gg[] = $get;
	}
	$newget .= implode($a, $gs);

	unset($gs);
	$n = false;
	foreach($gets as $key => $wert) {
		if(!in_array($key, $gg)) {
			$gs[] = $key.'='.$wert;
			$n = true;
		}
	}
	if($n) {
		$newget .= $a;
		$newget .= implode($a, $gs);
	}

	return $newget;
}

if(!function_exists('array_replace')) {
  /**
   * Sucht und ersetzt den Wert eines Array
   * @param	string	$needl		Suchbegriff
   * @param	string	$replace	Begriff, durch dass ersetzt werden soll
   * @param	array	$haystrack	Der zu durchsuchende Array
   * @return	array - ein neues Array mit den gew�nschten �nderungen
   */
  function array_replace($needl, $replace, $haystrack){
  	foreach ($haystrack as $key => $wert){
  		if($needl == $wert) {
  			$newarray[$key] = $replace;
  		}
  		else {
  			$newarray[$key] = $wert;
  		}
  	}
  
  	return $newarray;
  }
}

/**
 * Geht ein Array von hinten nach vorne durch und gibt es aus.
 * @param	array	$array	Das zu spiegelnde Array
 * @return	array - $array in umgekehrter Reihenfolge
 */
function array_spiegeln($array){
	$i = count($array);
	while($i--) {
		$arrsp[] = $array[$i];
	}

	return $arrsp;
}

/**
 * Sucht und ersetzt den Key eines Array
 * @param	string	$needl		Suchbegriff
 * @param	string	$replace	Begriff, durch dass ersetzt werden soll
 * @param	array	$haystrack	Der zu durchsuchende Array
 * @return	array - ein neues Array mit den gew�nschten �nderungen
 */
function array_key_replace($needl, $replace, $haystrack){
	foreach ($haystrack as $key => $wert){
		if($needl == $key) {
			$newarray[$replace] = $wert;
		}
		else {
			$newarray[$key] = $wert;
		}
	}

	return $newarray;
}

/**
 * Gibt den Link-Pfad zur Engine zur�ck
 * @param	string	$eng	Bezeichnung der Engine
 * @return	einen Link zum Engine-Ordner auf die Index mit der Get-Variable engine=$eng...
 */
function engine($eng) {
	$str = '../engine/?engine='.$eng;

	return $str;
}

/**
* Dekodiert die URL und gibt Variablen aus...
* @param	array	$twGet	Keys des Return-Array
* @return	array
*/
function decodeURL($twGet, $modRewrite=false){
	if ($modRewrite) {
		$indexPath = $_SERVER["PHP_SELF"];
		$indexPart = explode('/', $indexPath);
		$indexPieces = count($indexPart);

		for($i=0; $i<$indexPieces - 1; $i++) {
			$pfadStueckeZurIndex[] = $indexPart[$i];
		}
		$pfadZurIndex = implode('/', $pfadStueckeZurIndex);

		$url = $_SERVER["REQUEST_URI"];
		$urlBehindIndex = str_replace($pfadZurIndex.'/', '', $url);

		$gets = explode('/', $urlBehindIndex);

		$n=0;
		foreach ($twGet as $key){
			$get[$key] = $gets[$n];
			$n++;
		}
	}
	else {
		$get = $_GET;
	}

	return $get;
}

function decodeURLstring($twGet, $string, $modRewrite=false){
	if ($modRewrite) {
		$url1 = $string;
		$home = findRootPath().'html/';

		$url = str_replace($home, '', $url1);
		$urlparts = explode('/', $url);

		$n=0;
		foreach ($twGet as $key){
			$get[$key] = $urlparts[$n];
			$n++;
		}
	}
	else {
		$home = findRootPath().'html/?';

		$string = str_replace($home, '', $string);
		$urlparts = explode('&', $string);

		foreach ($urlparts as $urlpart){
			$stGet = explode('=', $urlpart);
			$get[$stGet[0]] = $stGet[1];
		}
	}

	return $get;
}

function url($str){
	$str = str_replace(' ', '-', $str);
	$str = str_replace('�', 'ue', $str);
	$str = str_replace('�', 'ae', $str);
	$str = str_replace('�', 'oe', $str);
	$str = str_replace('�', 'oe', $str);
	$str = str_replace('�', 'ae', $str);
	$str = str_replace('�', 'ue', $str);
	$str = str_replace('�', 'ss', $str);
	$str = str_replace('ü', 'ue', $str);
	$str = str_replace('ä', 'ae', $str);
	$str = str_replace('ö', 'oe', $str);
	$str = str_replace('Ö', 'oe', $str);
	$str = str_replace('Ä', 'ae', $str);
	$str = str_replace('Ü', 'ue', $str);
	$str = str_replace('ß', 'ss', $str);
	$str = str_replace('&uuml;', 'ue', $str);
	$str = str_replace('&ouml;', 'oe', $str);
	$str = str_replace('&auml;', 'ae', $str);
	$str = str_replace('&Ouml;', 'oe', $str);
	$str = str_replace('&Uuml;', 'ue', $str);
	$str = str_replace('&Auml;', 'ae', $str);
	$str = str_replace('&szlig;', 'ss', $str);
	$str = str_replace('&amp;', '_', $str);
	$str = str_replace('?', '_', $str);
	$str = str_replace('&', '_', $str);
	$str = str_replace('%', '_', $str);
	$str = str_replace('!', '_', $str);
	$str = str_replace('"', '_', $str);
	$str = str_replace('\'', '_', $str);
	$str = str_replace('.', '', $str);

	return $str;
}

function arrMirroring($arr){
	$i = count($arr);
	while($i--) {
		$arrsp[] = $arr[$i];
	}

	return $arrsp;
}

function str2arr($str){
	$len = strlen($str);
	for($i=0; $i<$len; $i++) {
		$arr[] = $str[$i];
	}
	return $arr;
}

function oneLevelArr($arr, $newArr=false){
	foreach ($arr as $wert){
		if (!is_array($wert)) {
			$newArr[] = $wert;
		}
		else {
			$newArr = oneLevelArr($wert, $newArr);
		}
	}

	return $newArr;
}

function dtTimestamp($tmstmp){
	$parts = explode(' ', $tmstmp);
	$date = $parts[0];
	$time = $parts[1];

	$datum = explode('-', $date);
	$retDatum = $datum[2].'.'.$datum[1].'.'.$datum[0];

	$ret = $retDatum.' '.$time;

	return $ret;
}

function dbDate($date){
	$date = explode('.', $date);
	krsort($date);
	$date = implode('-', $date);

	return $date;
}

function dtDate($date, $d=false, $m=false, $j=false){
	$date = explode('-', $date);
	krsort($date);

	if (!$d && !$m && !$j) {
		$date = implode('.', $date);
	}
	else {
		if ($d) {
			$retDate[] = $date[2];
		}
		if ($m) {
			$retDate[] = $date[1];
		}
		if ($j) {
			$retDate[] = $date[0];
		}

		$date = implode('.', $retDate);
	}
	return $date;
}

function dbTime($time){
	$time = explode(':', $time);
	$c = count($time);
	if ($c == 2) {
		$time[2] = '00';
	}
	$time = implode(':', $time);
	return $time;
}

function dtTime($time, $h=false, $m=false, $s=false){
	$time = explode(':', $time);

	$c = count($time);
	if ($c == 2) {
		$time[2] = '00';
	}

	if ($h) {
		$retTime[] = $time[0];
	}
	if ($m) {
		$retTime[] = $time[1];
	}
	if ($s) {
		$retTime[] = $time[2];
	}

	$time = implode(':', $retTime);
	return $time;
}

function date_empty($date){
	if (in_array($date, array('00.00.0000', '00.00.00', '00.0000', '00.00', '0000', '00', '00-00-0000', '0000-00-00', '0000-00', '00-00', ' ', ''))) {
		return true;
	}
	else {
		return false;
	}
}

function time_empty($time){
	if (in_array($time, array('00:00', '00:00:00', '00', ' ', ''))) {
		return true;
	}
	else {
		return false;
	}
}

function getSuffix($filename){
	$filenameparts = explode('.', $filename);
	$c = count($filenameparts) - 1;

	$suffix = $filenameparts[$c];

	return strtolower($suffix);
}

function filterStringByTag($tag, $string){
	if (in_array($tag, array('img', 'br', 'link', 'hr', 'input'))) {
		$startTag = '<'.$tag.' ';
		$closeTag = ' \/>';
	}
	else {
		$startTag = '<'.$tag.'>';
		$closeTag = '<\/'.$tag.'>';
	}

	$preg = preg_match_all('/'.$startTag.'(.*?)'.$closeTag.'/i', $string, $ret);

	if ($preg) {
		return $ret;
	}
	else {
		return $preg;
	}
}

function validMail($email) {
	$expression = '/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])' .
	'(([a-z0-9-])*([a-z0-9]))+' . '(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i';

	if (preg_match($expression, $email)) {
		return true;
	}
	else {
		return false;
	}
}

?>